//给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。 
//
// 说明：本题中，我们将空字符串定义为有效的回文串。 
//
// 示例 1: 
//
// 输入: "A man, a plan, a canal: Panama"
//输出: true
// 
//
// 示例 2: 
//
// 输入: "race a car"
//输出: false
// 
// Related Topics 双指针 字符串 
// 👍 310 👎 0

package com.leetcode.editor.cn;

//Java：验证回文串
class P125ValidPalindrome {
    public static void main(String[] args) {
        Solution solution = new P125ValidPalindrome().new Solution();
        // TO TEST
        String s = "A man, a plan, a canal: Panama";
        System.out.println(solution.isPalindrome(s));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public boolean isPalindrome(String s) {
            if (s == null || s.length() == 1) {
                return true;
            }
            s = s.toLowerCase();
            char[] array = s.toCharArray();
            int start = 0, end = array.length - 1;
            while (start < end) {
                if (!check(array[start])) {
                    start++;
                } else if (!check(array[end])) {
                    end--;
                } else if (array[start] == array[end]) {
                    start++;
                    end--;
                } else {
                    return false;
                }
            }
            return true;
        }

        //判断是否是字母或者数字
        public boolean check(char c) {
            if ((c >= 48 && c <= 57) || (c >= 97 && c <= 122) || (c >= 65 && c <= 90)) {
                return true;
            }
            return false;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}